package model;
/**
 * 
 * @author christopher
 * This is the IRules interface. It serves to define what core functions Model should
 * be able to call in order to determine what should happen when a given even takes place.
 */

public interface IRules {
	
	public void resolveBattle(boolean win);
	
	/**
	 * What happens when a player is selected?
	 */
	public void playerSelected(Player player);
	
	/**
	 * What happens after the die is rolled?
	 */
	public void dieRolled(Integer dieResult);
	
	/**
	 * What happens when a piece is moved?
	 */
	public void movePiece(int from, int moves);
	
	/**
	 * What should be done to finalize before the next players turn?
	 */
	public void cleanUp();
	
	/**
	 * Set and Check methods related to the state variable pushAllowed in Rules.
	 * This state variables determines whether or not it is permissible to push other 
	 * players pieces back to the starting area during the game.
	 */
	public void setPushAllowedOn();
	public void setPushAllowedOff();
	public boolean isPushAllowedOn();
	
	/**
	 * Set and Check methods related to the state variable enterGoalEasy in Rules. This variable
	 * determines whether or not players have the ability to easily enter the nest, meaning, do
	 * they have to land exactly on the nest to get the piece safely home, or is it enough that they
	 * roll high enough to at least land on it, even if they would in reality "move beyond" it?
	 */
	public void setEnterGoalEasyOn();
	public void setEnterGoalEasyOff();
	public boolean isEnterGoalEasyOn();

	public void onTimeOut();
}
